home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / docs / ippon / jumptbl / jumptbl.lzh / jumptbl.c next >
C/C++ Source or Header  |  2000-07-07  |  1KB  |  73 lines

  1. /* jumptbl.c */
  2. /* ジャンプテーブルのテスト(処理内容に意味無し) */
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6.  
  7. /* 関数プロトタイプ宣言 */
  8. int FuncTest0 (int, int);
  9. int FuncTest1 (int, int);
  10. int FuncTest2 (int, int);
  11.  
  12.  
  13. /* 関数へのポインタの配列 */
  14. /* int の引き数を2つ受け取り、返り値は int である関数へのポインタの配列 */
  15. typedef int (*func_test) (int, int);
  16. func_test FuncTest[] =
  17. {
  18.     FuncTest0,
  19.     FuncTest1,
  20.     FuncTest2,
  21. };
  22.  
  23.  
  24. int FuncTest0 (int i, int n)
  25. {
  26.     printf ("関数 FuncTest0() を実行しました 実行回数は %d 回目です\n", n);
  27.     return (i);
  28. }
  29.  
  30. int FuncTest1 (int i, int n)
  31. {
  32.     printf ("関数 FuncTest1() を実行しました 実行回数は %d 回目です\n", n);
  33.     return (i + 1);
  34. }
  35.  
  36. int FuncTest2 (int i, int n)
  37. {
  38.     printf ("関数 FuncTest2() を実行しました 実行回数は %d 回目です\n", n);
  39.     return (i * 2);
  40. }
  41.  
  42.  
  43. void FuncEnd (int n)
  44. {
  45.     printf ("関数 FuncEnd() を実行しました 実行回数は %d 回目です\n", n);
  46. }
  47.  
  48.  
  49. int main (int argc, char *argv[])
  50. {
  51.     int i, j;
  52.     int n = 1;        /* 何回目か */
  53.     void (*func_end) (int n);    /* 終了関数へのポインタ */
  54.  
  55.     /* 実験その1・関数へのポインタの配列 */
  56.     for (;;) {
  57.         printf ("0 から 3 の数字を入力して下さい(3 で終了)\n");
  58.         scanf ("%d", &i);
  59.         if (i == 3)
  60.             break;
  61.  
  62.         j = FuncTest[i] (i, n);        /* 各ルーチンへ飛ぶ(関数へのポインタ) */
  63.         printf ("    結果は %d です\n", j);
  64.         n++;
  65.     }
  66.  
  67.     /* 実験その2・関数へのポインタを変数に代入してみる */
  68.     func_end = FuncEnd;    /* 関数へのポインタは代入もできる */
  69.     (*func_end) (n);    /* FuncEnd() を実行する */
  70.  
  71.     return (0);
  72. }
  73.